package shiyl.use.springboot.loadbalance;

import java.util.List;

/**
 * 负载均衡策略
 * @author  shiyl
 *
 */
public interface ILoadBalancePolicy {


    /**
     * 策略名称
     * @return
     */
    public POLICY getPolicyName() ;

    /**
     * 根据负载均衡策略，选择负载点，并返回实际负载处理者（T）
     * @param loaders
     * @param <T>  Fabirc中的endpoint
     * @return
     */
    public <T> T selectEndpoint(List<ILoader<T>> loaders) ;

    /**
     * 根据负载均衡策略，选择并返回负载点
     * @param loaders
     * @param <T> 对Fabric中endpoint的适配负载点
     * @return
     */
    public <T> ILoader<T> selectLoader(List<ILoader<T>> loaders) ;
}
